/*
 * Copyright (c) 2020 Tunaiyi
 * Tny Framework is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

package com.tny.game.net.message.codec;

import com.tny.game.common.lifecycle.unit.annotation.*;
import com.tny.game.net.netty4.network.codec.*;
import com.tny.game.protoex.*;
import com.tny.game.protoex.annotations.*;
import io.netty.buffer.ByteBuf;

@Unit
public class ProtoExMessageBodyCodec<T> implements MessageBodyCodec<T> {

    @Override
    public T decode(ByteBuf buffer) {
        try (ProtoExReader bodyReader = new ProtoExReader(new ProtoExInputStream(buffer.nioBuffer()))) {
            return bodyReader.readMessage();
        }
    }

    @Override
    public void encode(T object, ByteBuf code) {
        try (ProtoExWriter writer = new ProtoExWriter()) {
            if (object != null) {
                writer.writeMessage(object, TypeEncode.EXPLICIT);
            }
            code.writeBytes(writer.toByteArray());
        }
    }

}
